Build 37 (2026-10-07)
- Fixed a regression so all 35 complete catalog languages appear again in the
  first-start and About selectors.
- Font-dependent width measurements no longer remove an entire language when
  one fixed main-window caption is slightly too wide.
- Shortened five fixed main-window labels per additional language without
  changing the full dialog, error, or help texts.
- Added a regression test requiring all 35 stable language IDs in the list.

Build 36 (2026-10-06)
- Added Vietnamese as the 35th language.
- Completely retranslated all 33 additional catalogs from the English source
  with DeepL and performed a structural quality pass.
- Automatically validated completeness, printf placeholders, NUL file filters,
  CRLF structure, UTF-16 limits, and protected product/security terminology.
- Included the April Fools' button and every scheduled message from 2027 to
  2034 in the translation audit.

Build 35 (2026-10-06)
- The language confirmed during first-start setup is now applied immediately
  to the already-created, still-hidden main-window controls.
- The main window therefore uses the selected language on the first run,
  whether password setup is completed or cancelled.

Build 34 (2026-10-06)
- On first start, a dedicated window containing only the language list and OK
  is shown before any password setup.
- A valid saved language skips the first-start choice; otherwise German is
  preselected on German Windows installations and English on all others.
- All 34 list entries now show the English language name after the native name
  instead of a German description.

Build 33 (2026-10-05)
- UAC for the combined external DLL profile on Windows 10/11; inserted smartcards
  no longer bypass it, including preflight of mixed decryption selections.
- Staged Explorer/drop/retry selections defer About restarts to the OK handoff.
- German language names in parentheses; popup width measured using its actual font.
- Root license collection restored from the included original texts.
- Build 32 DLL and signed sparse MSIX/certificate retained byte for byte.

Build 32 (2026-10-05)
- Shared persistent language selection in About and DE/EN toggle.
- External verified language data; runtime main-caption width checks.
- FIDO2 DLL and Explorer labels follow the selection.
- Additional translations are machine drafts pending native review.

Build 31 (2026-10-01)
- Preflight elevation for external FIDO2 files, including the scrypt writer;
  selected paths/options survive restart or cancelled UAC.
- Progress fill stays green regardless of caption theme.
- Full clickable website URL at the bottom right of About.
- Updated license overview and installer-ready ThirdPartyLicenses directory.

﻿Cryptext x64 – Change Log
=========================

Consolidated English edition
Current development status: v0.12 build 25 (file version 0.12.0.25)
Updated: September 29, 2026

This file consolidates the CHANGELOG files and relevant development README notes contained in the source package in chronological order. Very early internal builds before 0.2d do not have separate CHANGELOG files in the current package.


v0.12 build 25
===============

- When Cryptext runs elevated, `ChangeWindowMessageFilterEx` selectively admits
  the three classic Explorer file-drop messages `WM_DROPFILES`, `WM_COPYDATA`,
  and `WM_COPYGLOBALDATA` across Windows UIPI.
- The exception is installed only for a confirmed elevated process and only on
  the Cryptext main window. Unrelated messages remain blocked and a normal
  Cryptext process retains its previous behavior.
- Product, file, and sparse-MSIX versions were advanced to 0.12.0.25.
- A practical test with normal Explorer and elevated Windows 10 FIDO2 mode is
  still required.


v0.12 build 24
===============

- The external Windows 10 FIDO2 library now has the explicit filename
  `CryptextFido2.Win10.dll`.
- Loader, installer, tooltip, build script, probe source, tests, and current
  documentation consistently use the new name.
- The installer copies the renamed DLL automatically and removes the obsolete
  `CryptextFido2.dll` filename during an update.
- The license notes now explicitly refer to the restricted
  `LICENSE_Source_Inspection_EN-DE.txt` without describing it as an open-source
  license.
- Product, file, and sparse-MSIX versions were advanced to 0.12.0.24.


v0.12 build 23
===============

- External Windows 10 FIDO2 now triggers a targeted UAC restart only when an ABI-1 DLL is present; all other KDFs continue without a general administrator requirement.
- Explorer and command-line arguments survive because elevation occurs before command-line parsing and single-instance initialization.
- A single-file operation no longer shows a second generic Cryptext error after the DLL dialog has already displayed the precise PIN/CTAP error.
- Encryption, decryption after restart, multi-file processing, missing-DLL behavior, and a wrong PIN were successfully tested on Windows 10 with real hardware.
- The large third-party source trees were removed from the distribution. Versions, hashes, project links, complete license texts, and the modified `hid_win.c` remain available.


v0.12 build 22
===============

- Optional `CryptextFido2.dll` adds a direct USB CTAP2/hmac-secret path for Windows 10/11.
- The DLL is loaded only by absolute path beside the EXE with a restricted search path and ABI verification.
- The Windows 10 option is enabled only when a compatible DLL is present.


v0.12 build 21
===============

- Every Cryptext-owned main, dialog, progress, vault, and on-screen-keyboard window now uses the same purple system title bar with white text and a clearly visible purple outer border on Windows 11.
- The implementation centralizes the documented DWM window attributes for border, caption, and caption-text color in the common helper already called by every Cryptext window.
- Windows-owned security interfaces, especially WebAuthn/PIN, are not restyled.
- The vault PIN fields now honor the visible caret and selection like the other protected password fields. Digit input, Backspace, and Delete therefore no longer operate unconditionally at the end of the buffer.
- The bilingual source-inspection license is additionally included under the explicit root filename `LICENSE_Source_Inspection_EN-DE.txt`.
- Product, file, and sparse-MSIX versions were advanced to v0.12 build 21 and 0.12.0.21.
- Cryptext64.exe is 253,440 bytes and Cryptext64Shell.dll is 19,968 bytes. All 122 automated tests passed; the high-profile test reached approximately 1,045 MiB peak RSS.


v0.12 build 20
===============

- Windows 11 testing confirms that the modern Explorer invocation corrected in build 19 now works for files and folders.
- The primary file command now shows “Encrypt” or “Decrypt” according to the selection; only a mixed selection retains the neutral “Cryptext” title. If selection data is not available during early menu construction, “Encrypt” remains the visible fallback title.
- Folder encryption now has its own IExplorerCommand class, so the two folder subcommands are reliably titled “Encrypt” and “Decrypt”.
- The separate initial/change-password dialog now applies typing, Backspace, and Delete at the visible caret and replaces selected ranges. Entering `123`, moving left three times, and typing `Test` therefore produces `Test123`.
- The sparse MSIX specifically excludes `HKCU\Software\Cryptext64` and `HKCU\Software\Classes\Cryptext64.EncryptedFile` from registry-write virtualization. The file-icon variant selected in the About window can therefore update the normal Explorer association instead of only a package-private registry view.
- Product, file, and sparse-MSIX versions were advanced to v0.12 build 20 and 0.12.0.20.
- Cryptext64.exe is 252,928 bytes and Cryptext64Shell.dll is 19,968 bytes. All 117 automated tests passed; the high-profile test reached approximately 1,045 MiB peak RSS.


v0.12 build 19
===============

- Practical testing of build 18 confirmed that the new IExplorerCommand entries appear in the primary Windows 11 context menu: as “Cryptext” for files and as a two-command submenu for folders.
- Invoking a new entry nevertheless produced “The remote procedure call failed.” The classic IContextMenu entry under “Show more options” remained separate.
- The concrete crash was in the modern selection loader's cleanup routine: after entering a small local subroutine, two stack addresses were displaced by eight bytes. As a result the `IShellItem` pointer was passed to `CoTaskMemFree`, followed by treating the path buffer as a COM interface. Build 19 uses the correct addresses.
- `IExplorerCommand::Invoke` therefore no longer manufactures a `CMINVOKECOMMANDINFO` structure or calls `IContextMenu::InvokeCommand` internally.
- After loading and classifying the `IShellItemArray` selection, the modern command now calls a shared non-COM launch helper directly. The classic command uses the same helper.
- Version metadata was advanced to v0.12 build 19 and 0.12.0.19. This invocation path still requires practical Windows 11 testing.


v0.12 build 18
===============

- Windows 11 testing confirmed the build-17 certificate installation and sparse-MSIX registration. The modern Cryptext command nevertheless appeared for no file or folder type in the primary menu; the classic command under “Show more options” continued to work.
- The IExplorerCommand implementation was compared with three working references: IExplorerCommand-Examples, W11ContextMenuDemo, and NanaZip. All confirm a `SurrogateServer` without `AppId`, so no speculative manifest field was added.
- `GetTitle` and `GetState` no longer require an already available `IShellItemArray` while Explorer constructs the primary menu. `GetState` immediately reports the command as enabled; the complete selection is loaded and validated only by `Invoke`. Explorer can therefore no longer silently omit the command because selection data was unavailable too early.
- The primary command has the stable construction-time title “Cryptext”. Encryption/decryption detection remains unchanged at invocation time.
- KDF rows in the compact About window again use 18 rather than 16 dialog units of vertical spacing. The normal dialog font, window dimensions, buttons, and small path line are retained.
- Obsolete development notes were removed from build output. In the distribution package, compiler, source, and test files are collected under `scr`; `bin`, `docs`, installers, README, CHANGELOG, and the license remain directly visible.
- Cryptext64.exe is 252,416 bytes and Cryptext64Shell.dll is 19,456 bytes. All 112 automated tests passed; the high-profile test reached approximately 1,045 MiB peak RSS.


v0.12 build 17
===============

- Practical Windows 11 testing of build 16 produced native error 0x800B0109 while registering the sparse MSIX: the self-signed test certificate had been added only to `CurrentUser\TrustedPeople`, while MSIX package validation uses the local-computer certificate store.
- After displaying the subject, thumbprint, and expiration date and receiving explicit Y/N consent, the installer now requests administrator approval once and adds only the public certificate to `LocalMachine\TrustedPeople`.
- The discouraged root-certificate store is not used. The private signing key still remains exclusively on the build computer.
- After import, the installer verifies that the exact thumbprint is present in the machine store. A stale, ineffective build-15/16 entry under `CurrentUser\TrustedPeople` is removed precisely.
- The installed thumbprint is saved for uninstallation. After its own administrator confirmation, `uninstall_shell_user.cmd` removes exactly this test certificate; if removal is declined or fails, the thumbprint is retained for a later attempt.
- The classic shell extension, file association, application files, cryptography, and About-window layout are unchanged from build 16.
- Cryptext64.exe is 252,416 bytes and Cryptext64Shell.dll is 19,456 bytes. All 111 automated tests passed; the high-profile test reached approximately 1,045 MiB peak RSS.


v0.12 build 16
===============

- The smaller font introduced for the six KDF rows in build 15 was removed. All selection rows once again use the same normal dialog font.
- The compact dialog size of approximately 527 x 565 pixels remains unchanged.
- Save and Cancel were moved downward. Their distance from the grey path line is now approximately five rather than nineteen dialog units.
- The eight-pixel micro-font remains reserved exclusively for the unobtrusive executable path.
- Historical preview build metadata, saved preview test logs, the preview-4 source patch, and their old result reports were removed from the package.
- File-format, KDF, vault, legacy, licensing, and provenance documentation remains included.
- Cryptext64.exe is 252,416 bytes and Cryptext64Shell.dll is 19,456 bytes. All 111 automated tests passed.


v0.12 build 15
===============

- The About window was reduced again to approximately 527 x 565 pixels. The acknowledgement and the small grey path of the running Cryptext64.exe remain visible.
- The key-derivation rows use a more compact font so that both complete FIDO2 descriptions remain visible.
- install_shell_user.cmd is now the only installation command the user needs to start. If the Windows 11 test package is missing, the CMD file automatically starts the package build script.
- MakeAppx.exe and SignTool.exe are located in the installed Windows SDK. On Windows 10, Cryptext64.Win11.msix and Cryptext64.Win11-Test.cer are created and signed, but the modern Windows 11 menu is not registered there.
- On Windows 11, the package signature and CER file are compared by certificate thumbprint. Before first trust, Cryptext displays the subject, thumbprint, and expiration date and requires explicit confirmation.
- If trust is declined or the certificate does not match, the classic Explorer extension remains available under “Show more options”.
- Existing matching package registrations and already trusted certificates are detected. Uninstallation removes the exact bundled test certificate from CurrentUser\TrustedPeople.
- Practically confirmed: after installation of the required Windows SDK components, the one-step invocation on Windows 10 successfully created both the MSIX and CER files.
- Cryptext64.exe is 252,416 bytes and Cryptext64Shell.dll is 19,456 bytes. All 111 automated tests passed.


v0.12 build 12 through build 14
===============================

- Cryptext64Shell.dll additionally implements IExplorerCommand for the primary Windows 11 context menu; IContextMenu remains available for Windows 10 and “Show more options”.
- A sparse MSIX references the normal Cryptext files and contains no second EXE or DLL.
- The Cryptext on-screen keyboard is hidden in native FIDO2 mode.
- The About window acknowledges N_T_F_D for practical FIDO2 and Explorer testing.
- The path of the running executable was first added as a field and then reduced to a borderless grey micro-status line at the bottom of the dialog.
- Installer and uninstaller track package version and external installation path so a matching registration is not replaced unnecessarily.


v0.12 build 9 through build 11
==============================

- New FIDO2 files use CT64FILE v3 profile 2. A root secret is retained only for the active selection; every file receives a separate AES-256 key through its own random salt.
- With WebAuthn API v8+, one PIN/touch authorization is sufficient for a new multi-file request. API v4 through v7 requires two initial authorizations and then no additional authorization per file or verification pass.
- Existing FIDO2 profile-1 files remain readable.
- The password field now maps cursor, mouse, and selection positions to the protected SecureInput buffer. Insert, replacement, Backspace, and Delete act at the visible position; removed remnants are overwritten.
- On first launch, the language follows the Windows display language unless a valid user selection has already been stored.
- FIDO2 allows Cryptext to remain in the notification area without retaining a password. Explorer Quick Mode supports FIDO2 but still requests Windows/hardware authorization for every new request.
- The custom-title-bar pin was moved one pixel to the right.


v0.12 build 6 through build 8
=============================

- The FIDO2 selection distinguishes the integrated Windows 11 WebAuthn API v4+ path from the not-yet-implemented, disabled Windows 10 placeholder for an external libfido2 DLL.
- Windows Security dialogs use the visible progress window as their owner. Active WebAuthn calls can be cancelled through the official cancellation ID.
- With WebAuthn API v8+, hmac-secret can already be returned while creating the credential; API v4 through v7 retains the compatible GetAssertion path.
- The group frame encloses both FIDO2 rows. The integrated option is disabled without WebAuthn API v4, while tooltips remain accessible for disabled rows.
- Error messages display meaningful hexadecimal return codes. Folder-enumeration failures preserve the native Windows code, so a folder completely blocked by ACL reports 0x00000005 instead of 0x00000000.


v0.12 through build 5
=====================

- PBKDF2, Argon2id with 64 MiB or 1,024 MiB, scrypt with 256 MiB, and FIDO2/YubiKey are available as key-derivation choices. The active choice is shown in the main-window title.
- Saving the About window reliably keeps the visible KDF choice and no longer resets it to PBKDF2 unexpectedly.
- The RAM display is updated during synchronous memory-hard KDF calculations and drawn with reduced flicker.
- Tooltips document the fixed parameters of each key derivation.
- The first click on Cancel discards a loaded file/folder selection and clears its paths from process memory; a later click without a selection exits or hides Cryptext.
- The EXE and shell DLL contain native VERSIONINFO resources with product, file, company, and copyright information.
- The FIDO2 Windows Security dialog is displayed in front of Cryptext without changing the position of Cryptext windows.


0.11y dev29 through dev31
=========================

- DWM transitions were disabled for Cryptext-owned windows so they appear fully visible immediately.
- “Change password” now updates both the ground-password verifier and an existing encrypted vault secret transactionally.
- Vault setup can use a revalidated session password when the active input buffer is empty.
- NC-skin frame and RAM-clearing corrections prevent the lower frame lines from being overwritten.
- Fixed annual April Fools' messages for 2027 through 2034 were added; their text is stored only in ROT13 form inside the program.


0.11y dev28 / fix1 through fix3
===============================

- Cryptext automatically creates the REG_DWORD value NoSkin as 0 under HKCU\Software\Cryptext64 if it is missing or invalid.
- NoSkin=0, or any value other than 1, uses the NC skin. NoSkin=1 enables the classic native Windows title bar and original main-window geometry on the next program start.
- dev28 initially adapted the virtual keyboard to the NC-skin geometry. fix1 was an intermediate build with an additional 9-pixel correction and was superseded by the following root-cause fix.
- fix2 accounts for Windows constraining a window at the monitor edge according to its invisible frame. The virtual keyboard may therefore place that frame outside the work area while its visible edge remains aligned with the main window.
- The same visible-edge calculation was applied to the "Change password" dialog.
- fix3 moves only the virtual keyboard 2 pixels to the right compared with fix2. The final shift and invisible-frame constants are both 7 pixels; the password dialog remains at 9 pixels.
- The visual test and recommended tests for dev28 fix3 were confirmed on September 20, 2026.
- The fix builds do not change CT64FILE V1, cryptography, or NoSkin behavior.


0.11y dev27 / fix1
==================

- The main window received its own compact 20-pixel title bar with the NC logo, color themes, pin control, and minimize and close buttons.
- Dragging the title bar moves the window; right-clicking opens the system menu. Double-clicking the NC logo changes the color theme.
- The previous roll-up function was removed.
- fix1 adds bitmap glyphs for Ä, Ö, Ü, ä, ö, ü, and ß to the custom title bar, removes the no-longer-needed width table, and consolidates brush management in a helper routine.
- It also corrects the password-label position by 1 pixel and the group frames by 3 pixels.


0.11y dev25 through dev26
=========================

- dev25 moved large work areas into the uninitialized BSS section to reduce the PE file size.
- dev26 consolidated text, data, and BSS areas and packed the shell artwork more efficiently.
- Cancellation during phase 3 was hardened so completed files are handled correctly and temporary files are reliably cleaned up.


0.11y dev22 through dev24 fix1
==============================

- dev22 stabilized small/large file ordering. Progress is grouped for up to 100 files; files of 400 MiB or larger are handled separately.
- dev23 removed WS_BORDER from the progress window.
- dev24 replaced the border with a flat presentation.
- dev24 fix1 corrected a critical Win64 calling error involving CallWindowProcW in the progress window.


0.11y dev20 through dev21
=========================

- dev20 restored the compact Cryptext 3.4-style main-window geometry at 232 x 106 dialog units with MS Sans Serif 8.
- Common Controls v6 and a lower-flicker progress display were integrated, and session-password adoption was corrected.
- dev21 corrected radio-control widths, clarified telemetry rules, and defined DPI handling.


0.11y dev19
===========

- The security notice for "Remember until Windows sign-out" was changed to a true tracking tooltip. While the pointer remains over the option, the long notice is intended to stay readable without an automatic time limit.
- Identical duplicate Explorer/IPC requests are no longer stored as an additional pending request.
- Duplicate detection compares operation, keep/delete-source setting, and the complete path list; the internal Explorer-origin marker is intentionally not treated as a meaningful difference.
- A genuinely different request can still wait as the single separate pending request.
- Explorer Quick Mode, Single Instance, the ground-password model, CT64FILE V1, and the safe file transaction remain unchanged.


0.11y dev18
===========

- Added session-only "Explorer Quick Mode (no confirmation)" to the tray menu.
- Quick Mode can be used only while a valid ground password is remembered until Windows sign-out, and the mode itself is never enabled persistently.
- The first activation shows a detailed security warning. The Activate button stays disabled until the user explicitly checks the acknowledgement box.
- Only the fact that the warning was acknowledged is persisted; Quick Mode itself is off again after a program/Windows restart.
- Quick Mode applies only to explicit Encrypt/Decrypt requests from Cryptext64Shell.dll. AUTO, drag & drop, and ordinary command-line requests keep the visible confirmation flow.
- If an encrypted file requires a different/older password, it is not silently decrypted successfully; Cryptext becomes visible and returns to the normal password/error flow.
- "Clear password from memory" immediately disables Quick Mode as well.
- Passwords, password hashes, and file keys are still never transferred to other processes through IPC.
- Minor radio-control width correction so the "Password Options" group frame is drawn cleanly.


0.11y dev17 / fix1
==================

- Restored the compact main-window width used by the previous stable layout.
- Made tooltip registration for the security notice more robust.
- Explorer restarts are detected through the registered Windows "TaskbarCreated" message; a tray-resident Cryptext automatically re-adds its notification icon afterward.
- If re-adding the tray icon fails, the main window is shown so Cryptext cannot remain unreachable in the background.
- fix1 removes accidentally introduced UTF-8 BOMs from assembler source files that FASM 1.73.35 would otherwise interpret as an illegal instruction.
- No change to CT64FILE V1 or cryptography.


0.11y dev14 through dev16
=========================

- Replaced the old process-lifetime option with "Remember until Windows sign-out".
- A validated ground password can remain only in the memory of the one running Cryptext64.exe for the current Windows session.
- With a valid session password, X/Alt+F4 hides the main window and keeps Cryptext running in the system tray.
- Tray menu: "Open Cryptext", "Clear password from memory", and "Exit Cryptext".
- Exiting with a remembered password warns that the session password will be lost; normal Windows sign-out/shutdown ends the process without an unnecessary prompt and wipes sensitive state during normal session termination.
- Later Explorer/command-line launches activate the existing instance; IPC still carries only mode, source options, and paths.
- "Do not keep in memory" immediately clears a remembered session password.
- The initially visible help "?" was removed again. The "Remember until Windows sign-out" text itself became the hover area for a detailed German/English security notice.


0.11y dev12 / dev13
===================

- Added a small optional RAM display for the Cryptext process itself.
- Display format: RAM: <PrivateUsage> / <WorkingSetSize> MiB.
- Hidden by default; Shift+Info toggles it for the current instance.
- A normal click on Info still opens the About dialog.
- While visible, the RAM display updates once per second; when hidden, no dedicated RAM-display timer runs.
- The display state is not persisted.


0.11y dev10 / dev11
===================

- Folder drag & drop gained an explicit mode chooser:
    Encrypt
    Decrypt
    Automatic
    Cancel
- If at least one folder is present in the dropped selection, the chosen processing mode applies to the entire selection.
- Choosing the mode does not start cryptography. Processing still begins only after OK in the main window.
- Encrypt processes ordinary files and skips existing .$#! files.
- Decrypt processes only .$#! files.
- Automatic retains suffix-based processing.


0.11y dev8 / dev9
=================

- The virtual keyboard now follows the selected language: German QWERTZ, English QWERTY; Y/Z are swapped accordingly, including randomized layouts.
- Editing a remembered password was corrected: the field can be backspaced all the way to length 0 without the remembered bullets automatically reappearing.
- A different/old file password can be entered for decryption without replacing the separately remembered ground password.


0.11y dev6 / dev7
=================

- Added Single Instance behavior: at most one normal Cryptext64.exe runs per interactive Windows session.
- Later launches transfer only operation, keep/delete-source setting, and paths, then exit.
- Passwords, password hashes, vault secrets, and file keys are not transferred between processes.
- While one request is active, exactly one genuinely different request may wait separately.
- "Change password..." was redesigned as a self-contained three-field dialog:
    Current password
    New password
    Repeat new password
- The current ground password is verified locally before the new ground-password verifier is accepted.
- Files already encrypted keep the password with which they were created.


0.11y dev1 through dev5
=======================

- Added a fixed Cryptext ground-password model following the usability principle of classic Cryptext 3.4.
- If no ground password exists, a two-field setup dialog requests the password and its confirmation.
- Setup is offered at program startup; cancelling still allows Cryptext to start for decrypt-only use.
- Later encryption is checked against the local ground-password verifier before processing begins. A wrong password creates no temporary file and changes no user file.
- Decryption deliberately remains open to old passwords, files from other installations, and legacy files.
- The local verifier does not store the plaintext password; salt/verifier data is protected locally.
- Improved messages for missing/renamed files, access denied, and the special case "encryption succeeded but the original file could not be deleted".
- Password/PIN dialogs received consistent light dialog backgrounds and white input fields.


0.11x / fix1 / fix2 / fix3
==========================

- Added recursive folder encryption and decryption.
- Explorer folder context menu provides Encrypt and Decrypt commands.
- Every file remains an independent safe transaction; no folder-container format is created.
- Reparse points, junctions, and symbolic links are deliberately not followed.
- Large recursive selections use a dynamic VirtualAlloc-backed file list; folders with more than 2,000 files were successfully processed.
- Folder-enumeration errors such as ERROR_ACCESS_DENIED are handled separately from ordinary per-file access errors.
- Since fix3, drag & drop also accepts folders and mixed file/folder selections.
- Added a fourth switchable .$#! file-icon variant: BeOS v4. The About cycle now contains classic key, AES v2, AES v3, and BeOS v4.
- CT64FILE V1, modern AES-256-GCM/PBKDF2 cryptography, and the confirmed Cryptext 3.x/3.4 decrypt-only path remain unchanged.


0.11w fix1
==========

- Small UI/text correction patch on top of 0.11w.
- Fixed the About icon by using the correct STATIC message, STM_SETIMAGE.
- About OK button now uses the same flat style as the main-window buttons.
- Removed obsolete user-visible "0.10a test" wording from file-operation errors.
- Format error text now correctly mentions both CT64FILE V1 and legacy Cryptext 3.x/3.4 decryption.
- Updated English legacy/password helper text.
- No changes to CT64FILE V1, cryptography, vault logic, file transactions, or the legacy algorithm.


0.11w
=====

- Replaced the old Info MessageBox with a native modal About dialog.
- Layout intentionally recalls Cryptext 3.4, with icon, text, and OK button.
- Hidden Easter egg: clicking the About icon cycles through three embedded file-icon variants.
- The selected icon variant is stored in HKCU and applied to the .$#! Explorer file type.
- SHChangeNotify is used to request an Explorer icon refresh.
- Installer preserves the selected icon variant across updates/reinstallation.
- Batch-completion wording made version-neutral.
- The confirmed Cryptext 3.x/3.4 decrypt-only path from 0.11v fix2 is retained and was tested with several genuine file sizes.
- Modern encryption remains CT64FILE V1.


0.11v / 0.11v fix2
===================

- Added the first decrypt-only compatibility path for original Cryptext 3.x/3.4 files.
- .$#! files without CT64FILE magic are checked as possible legacy files.
- Reconstructed historical algorithm: SHA-1 + RC4.
- Historical layout: ciphertext + 12 bytes per-file data + 20-byte password check value.
- Legacy files still use the modern transaction-safe output pipeline: read-only source, hidden temp file, FlushFileBuffers, second on-disk decrypt/byte comparison, WRITE_THROUGH rename, and only then optional source deletion.
- Legacy format is never written.
- Important: the old file body has no modern complete MAC/AEAD integrity protection.
- fix2 corrected SHA-1 byte/word ordering to reproduce the original Cryptext 3.4 little-endian digest-word representation.
- fix2 was confirmed with genuine Cryptext 3.4 files and multiple passwords.


0.11u
=====

- UI polish for the DE|EN pixel switch.
- "Change password" dialog is clamped to the monitor work area.
- Caret placement in the two new password fields is corrected after bullet-display updates.
- No change to file cryptography, CT64FILE V1, vault A/B, or file transactions.


0.11t / compile fix1
====================

- Added German/English language switching.
- Small DE|EN control in the main window; preference stored best effort under HKCU.
- Main window, vault menus, drag/drop title, About, file selection, progress window, vault dialogs, virtual keyboard, error/batch messages, and Explorer context menu became switchable.
- Cryptext defaults to German if the preference is missing or invalid.
- Shell DLL rereads the language preference while creating the context menu; no Explorer restart is required just to switch language.
- compile fix1 corrected a FASM 1.73.35 macro/local-label interaction without changing runtime logic, cryptography, format, or UI behavior.


0.11s
=====

- "Change password..." became functional.
- It changes only the long Cryptext password stored in the local vault.
- Existing .$#! files are not re-encrypted and still require the password with which they were originally encrypted.
- Flow: authenticate vault PIN, enter the new long password twice, write a new A/B vault slot.
- A/B update writes generation+1 to the opposite slot, reads it back, and fully authenticates it before accepting the new generation.
- Password and PIN data remain in the intended protected buffers; any remembered old session password is wiped after a successful change.
- Minor UI wording/layout corrections.


0.11r
=====

- Installer made robust for package/source paths containing parentheses.
- First installation detects that no installed shell DLL exists and avoids an unnecessary Explorer restart.
- Update path removes old shell registration, stops Explorer if needed to unload the old in-process DLL, and restarts Explorer only if it had been running.
- Installation remains per-user under HKCU and does not require administrator rights.


0.11q
=====

- Improved positioning of the randomized vault keypad.
- Preferred positions: right, left, below, then above the PIN dialog.
- Final position is clamped to the nearest monitor work area.
- PIN/bullet display therefore remains visible whenever possible.
- No change to vault cryptography, CT64FILE V1, or file transactions.


0.11p / FASM compile fix2
=========================

- Added randomized on-screen numeric keypad for the vault PIN.
- Digits 0-9 are reshuffled with BCryptGenRandom every time the keypad opens.
- Clicks append digits directly to the protected PIN buffer; no simulated keyboard events.
- Removed the system menu from the progress window so a modal Windows menu loop cannot pause active processing.
- Fully successful batches no longer require an extra success MessageBox; warning/error/cancel summaries remain.
- FASM compile fix2 added explicit qword sizes for HWND-array stores; no runtime or cryptographic behavior changed.


0.11o
=====

- Successful single-file operations now finish without an extra development/success MessageBox.
- The progress dialog closes and Cryptext returns directly to the main UI.
- Errors, wrong password, tampering, collisions, disk-full errors, cancellation, and finalization warnings remain visible.
- Cryptography, vault, CT64FILE V1, and transaction logic unchanged.


0.11n
=====

- Added dedicated modal "Set up vault" dialog.
- Added dedicated modal "Unlock vault" dialog.
- Setup accepts a 4- to 6-digit PIN plus confirmation.
- Unlock loads the long Cryptext password into SecureInput only after successful DPAPI/PBKDF2/AES-GCM authentication.
- PIN edit controls display bullets only; actual PIN data stays in the best-effort VirtualLock-protected vault workspace.
- Paste/Cut/Clear are blocked.
- Cancelling setup restores the previously staged long password to the protected main SecureInput buffer.


0.11m
=====

- First productive VaultA/VaultB implementation.
- The real long Cryptext password can be stored in a versioned VLT1 REG_BINARY blob and unlocked again.
- Construction: Current-User DPAPI DeviceSecret, PBKDF2-HMAC-SHA-256, 256-bit KEK, random 256-bit VaultKey, and two AES-256-GCM layers.
- VaultA generation 1 is written, reread, byte-compared, and fully cryptographically validated.
- Existing VaultA/VaultB values are never silently overwritten during setup.
- CT64FILE V1 and the file-cryptography path remain unchanged.


0.11l
=====

- Added persistent A/B vault development test under HKCU\Software\Cryptext64\Vault.
- VaultTestA/VaultTestB values are structurally and cryptographically validated.
- Generation counters are considered only after successful DPAPI/PBKDF2/GCM validation.
- New slots are reread, byte-compared, and fully authenticated after registry writes.
- Prepared the later productive VaultA/VaultB implementation.


0.11k
=====

- Added isolated PIN/DPAPI/PBKDF2/AES-GCM cryptographic test for the planned vault.
- 4- to 6-digit PIN; KDF salt material combines public salt with a Current-User DPAPI DeviceSecret.
- 256-bit KEK and random 256-bit VaultKey.
- AES-256-GCM wrapping and deliberate tag-corruption rejection test.
- All involved key/secret material stays in the private vault workspace and is wiped afterward.
- No productive registry storage yet.


0.11j
=====

- First isolated vault foundation.
- Added vault module, HKCU path, and A/B blob structure.
- Versioned vault blob V1 with generation, KDF/cipher IDs, salt, nonces, tags, DPAPI section, and variable password ciphertext length.
- 20 KiB workspace through VirtualAlloc, VirtualLock best effort.
- Random 256-bit DeviceSecret and Current-User DPAPI helpers.
- Not yet connected to the file-encryption path.


0.11i
=====

- Added compact About dialog with developer/FASM information.
- No change to file, shell, or cryptographic logic.


0.11h
=====

- Added drag & drop for one or more files onto the main window.
- Dropped files reuse the existing Auto/Batch processing path; no second cryptographic implementation.
- Mixed ordinary and .$#! files are supported.
- Folder drops are intentionally rejected.
- Added "Always on Top" to the native window system menu.
- Late drop events are discarded during an active file transaction so the current batch list cannot be replaced.


0.11g
=====

- Removed emoji lock glyphs from Explorer menu text.
- Replaced them with real color, DPI-aware menu bitmaps from 16/32/64-pixel resources.
- If bitmap creation fails, the text menu command remains functional.
- No password, cryptography, or file-operation path was added to the Explorer process.


0.11f
=====

- Explorer commands initially gained lock symbols in their text for Encrypt/Decrypt.
- Mixed selection remained "Cryptext".
- Cryptography and file operations unchanged.
- This text-emoji approach was replaced by real bitmaps in 0.11g.


0.11e
=====

- Corrected the visual spacing of the "+ Disk-Sync" status indication.
- First progress-status line is drawn in one shared GDI text area so the intended spacing can be controlled exactly.
- Disk-sync pulse logic, double-click association, and cryptography unchanged.


0.11d
=====

- "+ Disk-Sync" position is calculated from the actual GUI font metrics.
- .$#! file type gains an open command: double-click launches Cryptext64.exe --decrypt "%1".
- Actual decryption still begins only after password entry and OK confirmation.


0.11c
=====

- Renamed "+ Sync" to "+ Disk-Sync" and moved it closer to the first status line.
- Installer update logic improved: Explorer can be stopped to unload the old shell DLL, then the new build is copied/registered and Explorer restarted.
- Cryptography and CT64FILE V1 unchanged.


0.11b
=====

- Progress dialog now shows a pulsing "+ Sync" indicator while waiting for FlushFileBuffers.
- File and cryptographic logic unchanged.


0.11a
=====

- Added per-user .$#! file-type registration and Cryptext file icon; extension remains visible.
- Progress window prefers a position to the right of the password dialog, then left.
- FlushFileBuffers moved to a small helper thread while the main UI continues pumping messages.
- Prevents a "Not Responding" appearance during long disk-sync periods on large files.
- Falls back to synchronous FlushFileBuffers if CreateThread fails.
- Transaction order and cryptography unchanged.


0.11
====

- Added first native x64 Explorer shell extension.
- Classic COM implementation using IClassFactory, IShellExtInit, and IContextMenu.
- Explorer supplies file paths; DLL starts the existing EXE command-line bridge.
- No passwords or cryptographic state in the Explorer process.
- Context-sensitive command: ordinary files Encrypt, .$#! files Decrypt, mixed selection Cryptext/Auto.
- Per-user HKCU registration without administrator rights.
- EXE and shell DLL copied to %LOCALAPPDATA%\Cryptext64.


0.10a
=====

- Added compact telemetry for longer file operations.
- Displays file size, smoothed MiB/s throughput, and approximate ETA with overall percentage.
- Progress-window size remains unchanged.
- Files >=400 MiB show size immediately; smaller slow operations may opt in dynamically.
- Throughput updates at most once per second with simple smoothing.
- During phase 1, ETA includes the later full on-disk verification pass.
- Cryptography and transaction order unchanged.


0.10
====

- Added command-line/Explorer dispatch bridge.
- Modes: --auto, --encrypt, --decrypt.
- Source-retention overrides: --keep-original, --delete-source.
- Windows-correct command-line parsing through CommandLineToArgvW.
- Paths from different directories are copied into a Cryptext-owned full-path list.
- Cryptography never starts automatically from command-line parsing; password dialog and OK remain mandatory.
- Invalid options fall back to manual mode.


0.9b
====

- Cosmetic polish for the progress dialog.
- File path moved slightly, status font reduced, and phase lines arranged more compactly.
- Progress math, batch behavior, cancellation, and CT64FILE V1 unchanged.


0.9a
====

- Fixed the per-file progress-position bug from 0.9.
- Progress dialog made more compact and visually closer to Cryptext 3.
- Flat Cancel button.
- Native smooth green progress bar.
- Cryptography and transaction logic unchanged.


0.9
===

- Added classic Win32 progress window.
- Shows "file x of y", current path, and three transaction phases.
- Progress mapping covers write/decrypt, on-disk verification, and final commit.
- Added cooperative cancellation at authenticated record boundaries.
- Cancellation is disabled once the short safe commit phase begins.
- Added specific errors for access denied, sharing violation, write protection, collision, disk full, format, verification, and GCM authentication.
- Batches can continue after individual errors and receive a final status summary.


0.8a
====

- Improved bullet display for remembered session passwords without copying password characters back into the edit control.
- Added multi-select support to the Windows file dialog.
- One active password can be reused for a complete batch.
- Each item independently dispatches to encrypt/decrypt based on suffix.
- Failures are counted and do not necessarily stop later items.
- Added final multi-selection summary.


0.8
===

- "Keep original file" now works symmetrically for encryption and decryption.
- Source is deleted only after complete verification, commit, and metadata restoration.
- Enabled process-session option "remember until Cryptext exits".
- Session password occupies a separate part of the best-effort locked memory page.
- Active operation password is still wiped after each operation.
- Authentication failure can wipe the session cache and force manual re-entry.


0.7
===

- Added first complete modern CT64FILE-V1 decryption transaction.
- .$#! selection dispatches to decrypt.
- Hidden plaintext temp file with CREATE_NEW; no overwrite of existing destination.
- Metadata is authenticated before creating the plaintext temp file.
- Stored chunk size is honored within the 64 KiB..64 MiB reader range.
- Added reader-side PBKDF2 iteration resource cap.
- After initial decrypt+flush, a second full GCM pass compares plaintext temp bytes.
- Wrong password or corruption removes partial temp output and preserves the .$#! source.


0.6
===

- "Keep original file" checkbox became functional.
- Optional source deletion happens only after complete on-disk verification, rename, timestamp restoration, and attribute application.
- Failure to delete the source does not destroy the already verified output.
- Final encrypted file receives the source timestamps.


0.5b
====

- Retained the complete 0.5a on-disk verification.
- Added separate temp and final .$#! paths.
- Existing destination file is rejected before expensive cryptographic work.
- Commit only after successful verification via MoveFileExW(MOVEFILE_WRITE_THROUGH).
- Hidden temp attribute is prevented from leaking unintentionally to ordinary final files.


0.5a
====

- Added complete post-write on-disk verification.
- Temp file is closed after flush and reopened from disk.
- Header and exact expected size are checked again.
- PBKDF2 is run again from the values actually reread from the file.
- Metadata and data records are GCM-authenticated and byte-compared with the still untouched source.
- Verification failure removes the generated temp file.


0.5
===

- Added first real CT64FILE-V1 file writer.
- Source file opened read-only.
- Output initially created as hidden source.ext.$#!.temp with CREATE_NEW.
- PBKDF2-HMAC-SHA-256 writer policy set to 600,000 iterations.
- AES-256-GCM metadata record and 4 MiB data records.
- Fresh 16-byte salt and 8-byte nonce prefix from BCryptGenRandom.
- Metadata stores timestamps and restorable file attributes.
- FlushFileBuffers and exact expected file-size check.
- Work buffers/key material wiped before release.
- No final rename and no decryption yet in this build.


0.4a
====

- Froze CT64FILE V1.
- Defined 72-byte fixed header and 48-byte encrypted metadata layout.
- Exact UTF-16LE password-encoding rule without NUL/normalization.
- Froze nonce, AAD, and record byte ordering.
- Writer default set to 600,000 PBKDF2 iterations stored per file.
- Published deterministic interoperability test vector.
- No real user-file I/O yet.


0.4
===

- Added first executable cryptographic core in RAM.
- PBKDF2-HMAC-SHA-256 through Windows BCryptDeriveKeyPBKDF2.
- AES-256-GCM through Windows CNG.
- Fresh salt and GCM nonce through BCryptGenRandom.
- Authenticated Additional Data in the test record.
- Encrypt->decrypt->byte comparison in RAM.
- Deliberately corrupted tag must be rejected with AUTH_TAG_MISMATCH.
- Removed old fixed SecureInput SHA-256 diagnostic.
- The 10,000 PBKDF2 count used here was only for the quick RAM self-test.


0.3i
====

- Virtual-keyboard UI polish.
- DT_NOPREFIX allows literal "&" display.
- Bullet-display caret explicitly moved to the end.
- No change to SecureInput, randomization, or protection mechanisms.


0.3h
====

- Added deterministic SecureInput correctness test.
- Private UTF-16LE SecureInput buffer checked with CNG SHA-256.
- Fixed test vector Test0815$#!.
- SecureInput wiped after diagnostic result.
- No real file cryptography yet.


0.3g
====

- Virtual keyboard again starts in canonical QWERTZ layout.
- Added manual randomize/shuffle control.
- Every click creates a fresh Fisher-Yates permutation using BCryptGenRandom.
- Shift, Backspace, Space, and Randomize stay fixed.
- Existing password contents survive reshuffling.


0.3f
====

- Added first actual virtual-keyboard character-position randomization.
- 40 character slots shuffled with Fisher-Yates and BCryptGenRandom.
- RNG failure falls back to canonical QWERTZ.
- No synthetic keyboard events.


0.3e
====

- Separated visible keyboard-slot position from symbol meaning internally.
- Added runtime Slot->SymbolID mapping.
- Prepared safe randomization without rewriting SecureInput or hit-testing logic.


0.3d
====

- Shift and Backspace no longer trigger unnecessary label/mouse-pointer concealment.
- Only password-producing keys are treated as sensitive; Space remains sensitive.
- Existing concealment interval for sensitive clicks retained.


0.3c
====

- Added virtual Shift key without synthetic OS keyboard events.
- One-shot Shift.
- German QWERTZ/number-row Shift mapping.
- SymbolID remains independent of position and Shift state.


0.3b
====

- Virtual keyboard now hides the mouse pointer during sensitive clicks in addition to key labels.
- Labels/pointer return only after at least 140 ms and mouse-button release.
- Uses SetCursor(NULL), avoiding ShowCursor counter changes.
- Capture protection remains best effort.


0.3a
====

- FASM 1.73.35 compatibility corrections in virtual-keyboard code.
- No functional or layout change.


0.3
===

- Added first functional custom virtual keyboard as a separate top-level window.
- Custom GDI drawing; no native BUTTON child controls.
- No SendInput/keybd_event/synthetic keyboard messages.
- Dedicated SecureInput path.
- Keyboard follows the password dialog and is clamped to the monitor work area.
- WDA_EXCLUDEFROMCAPTURE best effort.
- No file encryption/decryption yet.


0.2d
====

- Added flat button style for OK, Cancel, Change password, and Info.
- Corrected README version typo.
- File encryption/decryption was still disabled in this early UI build.


END
===

Current status: Cryptext x64 0.11y dev19
See README-EN.txt for installation, usage, security model, legacy notes, and roadmap.
